package raft

import (
	"errors"
	"strings"
)

// Config 初始化 raft 配置参数
type Config struct {
	MinElectionTimeout int      // 最小选举超时计数
	MaxElectionTimeout int      // 最大选举超时计数
	HeartbeatTimeout   int      // 日志复制计数
	Port               int      // 端口
	Cluster            []string // cluster
}

func NewDefaultConfig(cluster string, port int) *Config {
	c := strings.Split(cluster, ",")

	return &Config{
		MinElectionTimeout: 1000,
		MaxElectionTimeout: 5000,
		HeartbeatTimeout:   500,
		Port:               port,
		Cluster:            c,
	}
}

func (cfg *Config) Validate() error {
	if len(cfg.Cluster) == 0 {
		return errors.New("no cluster specified")
	}
	if cfg.Port == 0 {
		return errors.New("no port specified")
	}
	return nil
}
